package com.gosling.gosling.mobao;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.gosling.cloudspace.common.entity.BaseResult;
import com.gosling.cloudspace.common.entity.pojo.OrderInfoPO;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.util.ReflectionUtils;

import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MobaoBLRTest {

    public static final ObjectReader reader = new ObjectMapper().reader();
    public static final com.alibaba.fastjson2.JSONObject jsonObject3 = new com.alibaba.fastjson2.JSONObject();
    public static final String NUC_ATTR_01 = "01";
    public static final String NUC_ATTR_02 = "02";
    public static final String NUC_ATTR_03 = "03";
    public static final String[] NUC_ATTRS = {NUC_ATTR_01, NUC_ATTR_02, NUC_ATTR_03};
    public static final List<String> NUC_ATTR_LIST = Arrays.asList(NUC_ATTRS);
    final static MD5 MD_5 = MD5.create();
    final static JSONUtil JSON_UTIL = new JSONUtil();

    public static void main(String[] args) throws Exception {

        //用java写一个数如果恰好等于它的因子之和，找出1000以内的所有完数。

        /***一球从100米高度自由落下，每次落地后反跳回原高度的一半；再落下，求它在 第10次落地时，共经过多少米？第10次反弹多高**/

        //输入一个整数,判断是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

        System.out.println(isValidIdCard("130202202210037476"));
        System.out.println(IdcardUtil.isValidCard("130202202210037476"));

    }

    /**
     * 校验身份证是否有效
     *
     * @param idCard 身份证号字符串
     * @return 如果有效则返回true，否则返回false
     */
    public static boolean isValidIdCard2(String idCard) {
        // 定义身份证号码的数字段和校验位
        String[] idCardFields = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
        String[] idCardCheckCodes = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};

        // 校验身份证号码是否正确
        if (idCard.length() != 18) {
            return false;
        }

        // 遍历身份证号码字符串
        for (int i = 0; i < idCard.length(); i++) {
            // 获取身份证号码的每一位数字
            int idCardNumber = Integer.parseInt(idCard.substring(i, i + 1));
            // 获取身份证号码校验位对应的数字值
            int idCardCheckCode = Integer.parseInt(idCardCheckCodes[i / 8]);
            // 计算校验位是否符合要求
            if (idCardNumber % 11 != idCardCheckCode) {
                return false;
            }
        }

        // 如果所有校验位都符合要求，则说明身份证号码有效
        return true;
    }

    /**
     * 校验身份证是否有效
     *
     * @param idCard 身份证号字符串
     * @return 如果有效则返回true，否则返回false
     */
    public static boolean isValidIdCard(String idCard) {
        // 定义身份证号码字符集
        String[] idCardChars = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
        // 定义身份证号码校验位
        String[] idCardChecker = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};

        // 将身份证号码字符串转换为数字序列
        String[] idCardNumbers = idCard.split("");
        int[] idCardValues = new int[17];
        for (int i = 0; i < 17; i++) {
            try {
                idCardValues[i] = Integer.parseInt(idCardNumbers[i]);
            } catch (NumberFormatException e) {
                return false;
            }
        }

        // 校验出生日期是否正确
        Date birthDate = null;
        try {
            birthDate = new SimpleDateFormat("yyyy-MM-dd").parse(idCardNumbers[17]);
        } catch (Exception e) {
            return false;
        }
        if (birthDate.before(new Date())) {
            return false;
        }

        // 校验地址码是否正确
        String[] addressCodes = idCardNumbers[0].substring(6, 14).toUpperCase().split("");
        String address = "";
        for (String addressCode : addressCodes) {
            int idx = addressCode.indexOf("A");
            if (idx != -1) {
                address += addressCode.charAt(0);
            } else if (idx != -1 && addressCode.charAt(1) == 'A') {
                address += addressCode.charAt(0);
                address += addressCode.charAt(2);
            } else {
                return false;
            }
        }
        if (!address.matches("[\\u4E00-\\u9FA5A-Za-z\\d\\-\\_\\s]+")) {
            return false;
        }
        // 校验性别码是否正确
        if (idCardValues[0] < 4 || idCardValues[0] > 5) {
            return false;
        }
        // 校验校验码是否正确
        int[] idCardCheckDigits = new int[5];
        for (int i = 0; i < 5; i++) {
            int idx = Integer.parseInt(idCardChecker[i]) - '0';
            if (idx < 0 || idx > 9) {
                return false;
            }
            idCardCheckDigits[i] = idx;
        }
        int sum = 0;
        for (int i = 0; i < 17; i++) {
            int digit = idCardValues[i];
            sum += digit * (i % 2 == 0 ? 2 : 1);
        }
        for (int i = 0; i < 5; i++) {
            int idx = idCardCheckDigits[i] * 10 + idCardCheckDigits[i] - '0';
            sum -= idx;
            if (sum > 9) {
                return false;
            }
        }
        return sum % 11 == 0;
    }

    private static void sdasad() {
        HashSet<String> mchntCdSet = new HashSet<>();
        mchntCdSet.add("1");
        for (String s : mchntCdSet) {
            mchntCdSet.add("2");
        }
        System.out.println(mchntCdSet);
    }

    private static void 不良人排行榜() {
        //袁天罡|未知|武境通玄，深不可测，堪比元婴修士，长生不老
//李嗣源(第六季神功大成)|未知|神功护体，刀枪不入
//李星云(第六季走火入魔)|深不可测|十招秒杀奥姑
//李克用|超越大天位|至圣乾坤功，已臻化境
//李茂贞|段位段位超越大天位|殒生蛊可复活，殒生蛊，蛊术，巫术，幻音诀
//天暗星(袁天罡心脏)|未知未知超越大天位|新任不良帅，对战全盛时期李嗣源
//萤勾|未知未知大天位巅峰|四大尸祖战力天花板
//奥姑|深不可测深不可测大天位巅峰|漠北武力天花板
//张玄陵|超越大天位超越大天位大天位后期|绝世高手，天师府张天师
//将臣|超越大天位超越大天位大天位后期|四大尸祖之首
//李星云(第五季全盛时期)|超越大天位超越大天位大天位中期|气经，龙泉剑法，天罡诀，号称天下内力前十
//旱魃|大天位巅峰大天位巅峰大天位中期|四大尸祖之一
//李偘|大天位巅峰大天位巅峰大天位中期|十二峒主，排行第二，教李星云气经
//十一峒主|大天位后期大天位后期大天位中期|十二峒主，排行十一
//鲜参|大天位后期大天位后期大天位中期|蚩梦母亲，十二峒主
//鬼王|大天位中期大天位中期大天位中期|玄冥教鬼王（隐藏实力后又吸了玄冥教众人）
//女帝(水云姬)|大天位中期大天位中期大天位中期|幻音坊女帝
//张子凡|大天位中期大天位中期大天位中期|五雷天心诀大成，新任张天师
//“殇”组织（第六季)|大天位中期大天位中期大天位中期|五位一体，杀人机器
//凌霄子|大天位中期大天位中期大天位中期|天山铸剑阁掌门
//巫王(第四季BOOS）|大天位中期大天位中期大天位初期|兵神怪坛
//慧觉大师|大天位中期大天位中期大天位初期|达摩院长老
//冥帝|大天位中期大天位中期大天位初期|玄冥教教主
//李嗣源（吸天子内力之前)|大天位中期大天位中期大天位初期|通文馆圣主，十三太保排行第一
//李存孝|大天位中期大天位中期大天位初期|战力计量单位（号称天下第一猛），十三太保排行第十
//蛊王|大天位初期|蚩梦父母，
//巫王旧部(6人)|大天位初期|6位一体
//花蝠子，鬼头幺|大天位初期|内力极强
//李存礼|大天位初期|十三太保排行第六
//上官云雀|中天位巅峰|不良人天巧星
//李存义(喝酒后)|中天位巅峰|十三太保排行第五
//巴尔|中天位巅峰|监国校尉，不良人天藏星，三千院，不良人总舵舵主
//慧明大师|中天位巅峰|不良人天彗星，迦叶寺僧人，佛衣百纳，教陆林轩乌柳心决
//侯卿|中天位巅峰|四大尸祖之一；，与尤川对战处于上风，但弱点过于明显，被反杀
//黑白无常(九幽玄天神功)|中天位巅峰|玄冥教黑白无常，吸人内功，擅长偷袭
//孟婆|中天位巅峰|不良人天佑星
//假李星云|中天位巅峰|功法与李星云一致
//尤川|中天位中期|万毒窟少祀官，巫王之子，与侯卿对战处于下风
//钟小葵|中天位中期|玄冥教钟馗
//水火判官，倾国倾城|中天位中期|四人不分伯仲
//巴也|中天位中期|监国将军
//巴戈|中天位初期|监国都尉
//李存忍|中天位初期|十三太保排行第十三
//李嗣昭|中天位初期|十三太保排行第三
//段成天|中天位初期|不良人天速星
//姬如雪|中天位初期|时强时弱，五五开，（与各路高手都有对招）
//艳阳天，玄净天，妙成天，广目天，多闻天|小天位巅峰|擅长团战，时强时弱，可敌军队，也可不敌高手
//王彦章|中天位初期|大梁将军
//李存勇|小天位巅峰|十三太保排行第十二，勇字门门主
//蚩梦|小天位初期|不擅长打架，擅长蛊术
//陆林轩(第六季)|小天位初期|战力不稳定，金蝉蛊，青莲剑歌，惊鸿，乌柳心决
//骆小北|小天位初期|不良人天速星
//阳叔子|小天位初期|不良人天立星
//蒋仁杰|小天位初期|五大阎君之首
//李存惠|小天位初期|十三太保排行第十一
//其余四大阎君|大星位|四大阎君
//黑白无常(修炼神功之前)|大星位|玄冥教黑白无常
//陆佑劫|中星位巅峰|不良人天损星，人称陆大侠
//温韬|中星位|不良人天捷星，不擅长武功，精通堪舆，五行七经八卦
//陆吉|中星位|
        String s = "1";
    }

    private static void sadsadsadsadsa() {
        //不良人战力排行榜,以最新时间|有过战斗经历为准
//角色	                            段位	                        描述
//袁天罡	                            武境通玄，深不可测	            堪比元婴修士，长生不老
//天净沙	                            未知	                        侠岚客串（非不良人角色）
//T0
//李嗣源（第六季神功大成）	            深不可测	                    神功护体，刀枪不入
//天暗星（袁天罡心脏）	                大天位巅峰	                新任不良帅，对战全盛时期李嗣源
//李星云（第六季走火入魔）	            超越大天位	                十招秒杀奥姑
//李克用	                            超越大天位	                至圣乾坤功，已臻化境
//李茂贞	                            超越大天位	                殒生蛊可复活，殒生蛊，蛊术，巫术，幻音诀
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T1梯队<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//李偘	                            超越大天位	                十二峒主，排行第二，教李星云气经
//萤勾	                            大天位巅峰	                四大尸祖战力天花板
//奥姑	                            大天位后期	                漠北武力天花板
//张玄陵	                            大天位后期	                绝世高手，天师府张天师
//将臣	                            大天位中期	                四大尸祖之首
//李星云（第五季全盛时期）	            大天位中期	                气经，龙泉剑法，天罡诀，号称天下内力前十
//旱魃	                            大天位中期	                四大尸祖之一
//十一峒主	                        大天位中期	                十二峒主，排行十一
//鲜参	                            大天位中期	                蚩梦母亲，十二峒主
//鬼王	                            大天位中期	                玄冥教鬼王（隐藏实力后又吸了玄冥教众人）
//女帝（水云姬）	                    大天位中期	                幻音坊女帝
//张子凡	                            大天位中期	                五雷天心诀大成，新任张天师
//“殇”组织（第六季）	                大天位中期	                五位一体，杀人机器
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T2梯队<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//凌霄子	                            大天位初期	                天山铸剑阁掌门
//巫王（第四季BOOS）	                大天位初期	                兵神怪坛
//慧觉大师	                        大天位初期	                达摩院长老
//冥帝	                            大天位初期	                玄冥教教主
//李嗣源（吸天子内力之前）	            大天位初期	                通文馆圣主，十三太保排行第一
//李存孝	                            大天位初期	                战力计量单位（号称天下第一猛），十三太保排行第十
//蛊王	                            大天位初期	                蚩梦父母，
//巫王旧部（6人）	                    大天位初期	                6位一体
//花蝠子，鬼头幺	                    大天位初期	                内力极强
//李存礼	                            中天位巅峰（半步大天位）        十三太保排行第六
//上官云雀	                        中天位巅峰（半步大天位）        不良人天巧星
//李存义（喝酒后）	                    中天位巅峰（半步大天位）        十三太保排行第五
//巴尔	                            中天位巅峰（半步大天位）        监国校尉，不良人天藏星，三千院，不良人总舵舵主
//慧明大师	                        中天位巅峰（半步大天位）        不良人天彗星，迦叶寺僧人，佛衣百纳，教陆林轩乌柳心决
//侯卿	                            中天位巅峰（半步大天位）        四大尸祖之一；，与尤川对战处于上风，但弱点过于明显，被反杀
//黑白无常（九幽玄天神功）	            中天位巅峰（半步大天位）        玄冥教黑白无常，吸人内功，擅长偷袭
//孟婆	                            中天位巅峰（半步大天位）        不良人天佑星
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T3梯队<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//假李星云	                        中天位中期	                 功法与李星云一致
//尤川	                            中天位中期	                 万毒窟少祀官，巫王之子，与侯卿对战处于下风
//钟小葵	                            中天位中期	                 玄冥教钟馗
//水火判官，倾国倾城	                中天位中期	                 四人不分伯仲
//巴也	                            中天位初期	                 监国将军
//巴戈	                            中天位初期	                 监国都尉
//李存忍	                            中天位初期	                 十三太保排行第十三
//李嗣昭	                            中天位初期	                 十三太保排行第三
//段成天	                            中天位初期	                 不良人天速星
//姬如雪（与各路高手都有对招）	        小天位巅峰（半步中天位）	     时强时弱，五五开
//艳阳天，玄净天，妙成天，广目天，多闻天	中天位初期（暂定）	             擅长团战，时强时弱，可敌军队，也可不敌高手
//王彦章	                            小天位巅峰（暂定）	             大梁将军
//李存勇	                            小天位初期	                 十三太保排行第十二，勇字门门主
//蚩梦	                            小天位初期	                 不擅长打架，擅长蛊术
//陆林轩（第六季）                  	小天位初期（无突出表现）	     战力不稳定，金蝉蛊，青莲剑歌，惊鸿，乌柳心决
//骆小北	                            小天位初期	                 不良人天速星
//阳叔子	                            小天位初期	                 不良人天立星
//蒋仁杰	                            小天位初期	                 五大阎君之首
//李存惠	                            大星位	                     十三太保排行第十一
//其余四大阎君	                    大星位	                     四大阎君
//黑白无常（修炼神功之前）	            中星位巅峰	                 玄冥教黑白无常
//陆佑劫	                            中星位	                     不良人天损星，人称陆大侠
//温韬	                            中星位	                     不良人天捷星，不擅长武功，精通堪舆，五行七经八卦
//陆吉	                            中星位


//不良人战力排行榜,以最新时间|有过战斗经历为准
//角色	                                段位	                        描述
//袁天罡	                            武境通玄，深不可测	            堪比元婴修士，长生不老
//天净沙	                            未知	                        侠岚客串（非不良人角色）
//T0
//李嗣源（第六季神功大成）	            深不可测	                    神功护体，刀枪不入
//天暗星（袁天罡心脏）	                大天位巅峰	                新任不良帅，对战全盛时期李嗣源
//李星云（第六季走火入魔）	            超越大天位	                十招秒杀奥姑
//李克用	                            超越大天位	                至圣乾坤功，已臻化境
//李茂贞	                            超越大天位	                殒生蛊可复活，殒生蛊，蛊术，巫术，幻音诀
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T1梯队<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//李偘	                                超越大天位	                十二峒主，排行第二，教李星云气经
//萤勾	                                大天位巅峰	                四大尸祖战力天花板
//奥姑	                                大天位后期	                漠北武力天花板
//张玄陵	                            大天位后期	                绝世高手，天师府张天师
//将臣	                                大天位中期	                四大尸祖之首
//李星云（第五季全盛时期）	            大天位中期	                气经，龙泉剑法，天罡诀，号称天下内力前十
//旱魃	                                大天位中期	                四大尸祖之一
//十一峒主	                            大天位中期	                十二峒主，排行十一
//鲜参	                                大天位中期	                蚩梦母亲，十二峒主
//鬼王	                                大天位中期	                玄冥教鬼王（隐藏实力后又吸了玄冥教众人）
//女帝（水云姬）	                        大天位中期	                幻音坊女帝
//张子凡	                            大天位中期	                五雷天心诀大成，新任张天师
//“殇”组织（第六季）	                    大天位中期	                五位一体，杀人机器
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T2梯队<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//凌霄子	                            大天位初期	                天山铸剑阁掌门
//巫王（第四季BOOS）	                    大天位初期	                兵神怪坛
//慧觉大师	                            大天位初期	                达摩院长老
//冥帝	                                大天位初期	                玄冥教教主
//李嗣源（吸天子内力之前）	            大天位初期	                通文馆圣主，十三太保排行第一
//李存孝	                            大天位初期	                战力计量单位（号称天下第一猛），十三太保排行第十
//蛊王	                                大天位初期	                蚩梦父母，
//巫王旧部（6人）	                    大天位初期	                6位一体
//花蝠子，鬼头幺	                        大天位初期	                内力极强
//李存礼	                            中天位巅峰（半步大天位）        十三太保排行第六
//上官云雀	                            中天位巅峰（半步大天位）        不良人天巧星
//李存义（喝酒后）	                    中天位巅峰（半步大天位）        十三太保排行第五
//巴尔	                                中天位巅峰（半步大天位）        监国校尉，不良人天藏星，三千院，不良人总舵舵主
//慧明大师	                            中天位巅峰（半步大天位）        不良人天彗星，迦叶寺僧人，佛衣百纳，教陆林轩乌柳心决
//侯卿	                                中天位巅峰（半步大天位）        四大尸祖之一；，与尤川对战处于上风，但弱点过于明显，被反杀
//黑白无常（九幽玄天神功）	            中天位巅峰（半步大天位）        玄冥教黑白无常，吸人内功，擅长偷袭
//孟婆	                                中天位巅峰（半步大天位）        不良人天佑星
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T3梯队<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//假李星云	                            中天位中期	                 功法与李星云一致
//尤川	                                中天位中期	                 万毒窟少祀官，巫王之子，与侯卿对战处于下风
//钟小葵	                            中天位中期	                 玄冥教钟馗
//水火判官，倾国倾城	                    中天位中期	                 四人不分伯仲
//巴也	                                中天位初期	                 监国将军
//巴戈	                                中天位初期	                 监国都尉
//李存忍	                            中天位初期	                 十三太保排行第十三
//李嗣昭	                            中天位初期	                 十三太保排行第三
//段成天	                            中天位初期	                 不良人天速星
//姬如雪（与各路高手都有对招）	            小天位巅峰（半步中天位）	     时强时弱，五五开
//艳阳天，玄净天，妙成天，广目天，多闻天	中天位初期（暂定）	             擅长团战，时强时弱，可敌军队，也可不敌高手
//王彦章	                            小天位巅峰（暂定）	             大梁将军
//李存勇	                            小天位初期	                 十三太保排行第十二，勇字门门主
//蚩梦	                                小天位初期	                 不擅长打架，擅长蛊术
//陆林轩（第六季）                  	    小天位初期（无突出表现）	     战力不稳定，金蝉蛊，青莲剑歌，惊鸿，乌柳心决
//骆小北	                            小天位初期	                 不良人天速星
//阳叔子	                            小天位初期	                 不良人天立星
//蒋仁杰	                            小天位初期	                 五大阎君之首
//李存惠	                            大星位	                     十三太保排行第十一
//其余四大阎君	                        大星位	                     四大阎君
//黑白无常（修炼神功之前）	            中星位巅峰	                 玄冥教黑白无常
//陆佑劫	                            中星位	                     不良人天损星，人称陆大侠
//温韬	                                中星位	                     不良人天捷星，不擅长武功，精通堪舆，五行七经八卦
//陆吉	                                中星位
    }

    private static void sadasdasds() {
        String s = "新蒲新区川味卤菜\t新蒲新区川味卤菜馆\t\t\t冉隆芬\t52210119760920524X\t冉隆芬\t0\t52210119760920524X\t2009-05-05\t1\t\tChinese\t92520390MA6GK1BR5Q\t2009-05-05\t0.00\t快餐\t冉隆芬\t15329880031\t新蒲新区新蒲办东风路(张应江租房)\t\t\t\t\t\t0033\t\t5\t\t\t\t\t2023-05-12 17:38:14\t\t\t2\t2099-05-05\t2099-05-05\t无\t\t\t\t\t1\t1\t5814\t\t\t\t52210119760920524X\t\t\t\t15329880031\t\t\t\t\t\tM999999\t\tD0\t1\t0\t\t\t\t\t0\t\t\t\t\t2099-05-05\t\t\t2009-05-05\t\t\t03\t\t\t贵州省\t7000\t遵义市\t7030\t红花岗区\t7045\t1\t冉隆芬\t6217987030000005296\t\t邮政储蓄银行\t中国邮政储蓄银行股份有限公司遵义市遵义会议会址支行\t403703001064\t\t\t52210119760920524X\t15329880031\t2\t\t\t15329880031\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";

        String s1 = "新蒲新区川味卤菜\t新蒲新区川味卤菜馆\t\t\t冉隆芬\t52210119760920524X\t冉隆芬\t0\t52210119760920524X\t2009-05-05\t1\t\tChinese\t92520390MA6GK1BR5Q\t2009-05-05\t0.00\t快餐\t冉隆芬\t15329880031\t新蒲新区新蒲办东风路(张应江租房)\t\t\t\t\t\t0033\t\t5\t\t\t\t\t2023-05-12 17:36:28\t\t\t2\t2099-05-05\t2099-05-05\t无\t\t\t\t\t1\t1\t5814\t\t\t\t52210119760920524X\t\t\t\t15329880031\t\t\t\t\t\tM999999\t\tD0\t1\t0\t\t\t\t\t0\t\t\t\t\t2099-05-05\t\t\t2009-05-05\t\t\t03\t\t\t贵州省\t7000\t遵义市\t7030\t红花岗区\t7045\t1\t冉隆芬\t6217987030000005296\t\t邮政储蓄银行\t中国邮政储蓄银行股份有限公司遵义市遵义会议会址支行\t403703001064\t\t\t52210119760920524X\t15329880031\t2\t\t\t15329880031\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";

        System.out.println(s.equals(s1));
    }

    private static void eawd() {
        String fileName = "123.xx";
        int beginIndex = fileName.lastIndexOf(".");
        if (-1 == beginIndex) {
        }
        String suffix = fileName.substring(beginIndex + 1);
        System.out.println(suffix);
        System.out.println(Collections.EMPTY_LIST.toString());
        Object s = null;
        System.out.println(String.valueOf(s));
    }

    private static void AAA() {
        String url = "http://192.168.30.13:7013/batch/file/upload";
        HashMap<String, Object> paramMap = new HashMap<>();
        //文件key必须为 file 名称必须为营业执照号
        paramMap.put("file", new File("C:/Users/Administrator/Desktop/91130229502153672M.zip"));
        paramMap.put("signMsg", "E10ADC3949BA59ABBE56E057F20F883E4332A4BDB68E476B8C809E74D330153E");
        //请自行配置
        String result = cn.hutool.http.HttpRequest.post(url)
                //表单内容
                .form(paramMap)
                //超时，毫秒
                .timeout(20000)
                .execute()
                .body();
        System.out.println("返回结果：" + result);
    }

    private static void aaa() {
        InputStream resourceAsStream = MobaoBLRTest.class.getClassLoader().getResourceAsStream("/config/banner.txt");
        if (ObjectUtil.isNull(resourceAsStream)) {
            System.out.println("adsadsadas");
        } else {
            System.out.println("cunzai");
        }

    }

    private static void sadasdsad() {
        String filename = "1";
        int beginIndex = filename.lastIndexOf(".");
        if (-1 != beginIndex) {
            String substring = filename.substring(beginIndex);
            System.out.println(filename.replace(substring, ""));
            System.out.println(substring);
            System.out.println(filename.substring(filename.indexOf(".")));
        }
    }

    private static void sadasdsdasd() {
        //
//        String s = "1234"+(char)65+"mm";
//        System.out.println(8 << 2);
//        long l1 = System.currentTimeMillis();
//        System.out.println(generate(s));
//        long l2 = System.currentTimeMillis();
//        System.out.println(MD_5.digestHex(s));
//        long l3 = System.currentTimeMillis();
////        System.out.println(MD5.create().digestHex(s));
////        long l4 = System.currentTimeMillis();
//        System.out.println(l2-l1 +"ms");
//        System.out.println(l3-l2 +"ms");
////        System.out.println(l4-l3 +"ms");

        String s = "Caused by: java.sql.SQLException: ORA-12899: 列 \"MOBAOPAY_AUDIT\".\"MERCHANT_BATCH_ORIGIN_DATA\".\"LEGAL_PERSON_CERT_TYPE\" 的值太大";

        String s1 = "MOBAOPAY_AUDIT.MERCHANT_BATCH_ORIGIN_DATA.LEGAL_PERSON_CERT_TYPE";

        String s2 = "\n" +
                "### Error updating database.  Cause: java.sql.SQLException: ORA-12899: 列 \"MOBAOPAY_AUDIT\".\"MERCHANT_BATCH_ORIGIN_DATA\".\"MERCHANT_TYPE\" 的值太大 (实际值: 2, 最大值: 1)\n" +
                "\n" +
                "### The error may exist in com/mobao360/batch/mapper/MerchantBatchOriginDataMapper.java (best guess)\n" +
                "### The error may involve com.mobao360.batch.mapper.MerchantBatchOriginDataMapper.insert-Inline\n" +
                "### The error occurred while setting parameters\n" +
                "### SQL: INSERT INTO MERCHANT_BATCH_ORIGIN_DATA  ( ID, create_time, platform_no, open_fund_settlement, name,  short_name, merchant_type, merchant_attribute, agent_no, industry_code, business_kind, merchant_property, salesman_no, business_type, mcc_code, wechat_business_kind_code, nucc_business_kind_code, cup_business_kind, alipay_business_kind, legal_person, legal_person_nationality, legal_person_sex, legal_person_cert_type, legal_person_cert_num, legal_person_cert_period_start, legal_person_cert_period_end, shareholder, shareholder_id_num, business_licence_no, business_licence_period_start, business_licence_period_end, registered_fund, business_scope, address, merchant_domain, icp, icp_period_start, icp_period_end, contact_person, contact_phone,   customer_tel, network_channel, shareholder_type,     shareholder_cert_type,     shareholder_cert_period_end,   shareholder_cert_period_start,   icp_status, industry_classify, industry_classify_name, province, province_code, city, city_code, county, county_code, merchant_classify, bank_account_name, account_no,  bank_name, branch_bank_name, branch_bank_no,     reserve_mobile_no, account_type,  manager_email, manager_tel )  VALUES  ( ?, ?, ?, ?, ?,  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,   ?, ?, ?,     ?,     ?,   ?,   ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  ?, ?, ?,     ?, ?,  ?, ? )\n" +
                "### Cause: java.sql.SQLException: ORA-12899: 列 \"MOBAOPAY_AUDIT\".\"MERCHANT_BATCH_ORIGIN_DATA\".\"MERCHANT_TYPE\" 的值太大 (实际值: 2, 最大值: 1)\n" +
                "\n" +
                "; uncategorized SQLException for SQL []; SQL state [72000]; error code [12899]; ORA-12899: 列 \"MOBAOPAY_AUDIT\".\"MERCHANT_BATCH_ORIGIN_DATA\".\"MERCHANT_TYPE\" 的值太大 (实际值: 2, 最大值: 1)\n" +
                "; nested exception is java.sql.SQLException: ORA-12899: 列 \"MOBAOPAY_AUDIT\".\"MERCHANT_BATCH_ORIGIN_DATA\".\"MERCHANT_TYPE\" 的值太大 (实际值: 2, 最大值: 1)\n";

        System.out.println(s1.contentEquals("MOBAOPAY_AUDIT.MERCHANT_BATCH_ORIGIN_DATA.LEGAL_PERSON_CERT_TYPE"));

//        s2 = s2.replaceAll("[\r\n]", "");

        System.out.println(s2);

        System.out.println(s2.substring(0, s2.indexOf("### The error")));

        System.out.println(s2.substring(s2.indexOf("MERCHANT_TYPE"), s2.indexOf("\" 的")));
    }

    public static String generate(String str) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] bs = md5.digest(str.getBytes());
            StringBuilder sb = new StringBuilder(40);
            for (byte x : bs) {
                if ((x & 0xFF) >> 4 == 0) {
                    sb.append("0").append(Integer.toHexString(x & 0xFF));
                } else {
                    sb.append(Integer.toHexString(x & 0xFF));
                }
            }
            return sb.toString();
        } catch (Exception noSuchAlgorithmException) {
            return null;
        }
    }

    private static void sdadasd() throws DocumentException, JsonProcessingException {
        System.out.println(System.currentTimeMillis());
        System.out.println(System.nanoTime());

        ooool();
    }

    private static void SAADFASDA() {
        //        System.out.println(Validator.isCreditCode("91110000794054085L"));
//        System.out.println(IdcardUtil.isValidCard("91110000794054085L"));

        String today = DateUtil.today();
        String now = DateUtil.now();
        System.out.println(today);
        System.out.println(now);

        boolean expression = ObjectUtil.notEqual("123", "1234");
        System.out.println(expression);
//        Assert.isFalse(expression, "法人证件与营业执照不一致");


//        BigDecimal multiply = new BigDecimal("0.00291").multiply(new BigDecimal(100));
//        BigDecimal multiply = new BigDecimal("0.0029");
//        System.out.println(multiply.setScale(4, BigDecimal.ROUND_UP).toString());


        String s = "Caused by: java.sql.SQLException: ORA-12899: 列 \"MOBAOPAY_AUDIT\".\"MERCHANT_BATCH_ORIGIN_DATA\".\"LEGAL_PERSON_CERT_TYPE\" 的值太大 (实际值: 2, 最大值: 1)";
        System.out.println(s.length());
        System.out.println(s.substring(0, 20));

        String str = "userName";
        Matcher matcher = Pattern.compile("([A-Z])").matcher(str);
        while (matcher.find()) {
            String target = matcher.group();
            str = str.replaceAll(target, "_" + target.toLowerCase());
        }
        System.out.println(str.toUpperCase());
    }

    private static void sad() {
        StringBuilder fieldValue = new StringBuilder();
        ArrayList<String> valueList = new ArrayList<>();
        valueList.add("1");
        valueList.add("2");
        valueList.add("3");
        ArrayList<String> dictionaryList = new ArrayList<>();
        dictionaryList.add("1");
        dictionaryList.add("2");
        dictionaryList.add("3");
        dictionaryList.add("4");
        for (String dicValue : valueList) {
            if (StringUtils.isBlank(dicValue)) {
                continue;
            }
            if (!dictionaryList.contains(dicValue)) {
                fieldValue.append("0");
            } else {
                fieldValue.append(dicValue);
            }
            fieldValue.append(",");
        }
        if (fieldValue.length() != 0) {
            fieldValue.insert(0, ",");
            System.out.println(fieldValue.toString());
        }

        HashSet hashSet = new HashSet(Arrays.asList(fieldValue.toString().split(",")));
        HashSet hashSet2 = new HashSet(dictionaryList);
        System.out.println(hashSet);
        System.out.println(hashSet2);
        hashSet2.removeAll(hashSet);
        System.out.println(hashSet2);
        System.out.println("剩余长度：" + hashSet2.size());
    }

    private static void lopo() {
        String url = "https://merch2.mobaopay.com/merch/orgApi/route.cgi";
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("file", new File("D:/test.xls"));
        String result = cn.hutool.http.HttpRequest.post(url)
                //表单内容
                .form(paramMap)
                //超时，毫秒
                .timeout(20000)
                .execute()
                .body();
        System.out.println("返回结果：" + result);
    }

    private static void sadsadas() {
        HashMap<String, Object> businessInfo = new HashMap<>();
        businessInfo.put("hasMaterial", false);
        businessInfo.put("id", "bdcc449ebbb64320a384713e4216a587");
        businessInfo.put("mark", "businessInfo");
        businessInfo.put("name", "工商信息");
        businessInfo.put("type", "png");
        businessInfo.put("typeName", "工商信息");
        businessInfo.put("url", "http://192.168.20.61:8503/api/mobaopay-file-service/file/downloadFile/MAXWELL/210601/bdcc449ebbb64320a384713e4216a587");
// 最终传输的结果

        ArrayList<HashMap<String, Object>> list = new ArrayList<>();
        list.add(businessInfo);

        String result = JSONUtil.toJsonStr(businessInfo);
        String listString = JSONUtil.toJsonStr(list);
        System.out.println(result);
        System.out.println(listString);
        System.out.println(DateUtil.date().toTimestamp());
        System.out.println(DateUtil.date().toJdkDate());
    }

    private static void LMK() {
        String s = "{\n" +
                "  \"hasMaterial\": false,\n" +
                "  \"id\": \"bdcc449ebbb64320a384713e4216a587\",\n" +
                "  \"mark\": \"businessInfo\",\n" +
                "  \"name\": \"工商信息\",\n" +
                "  \"type\": \"png\",\n" +
                "  \"typeName\": \"工商信息\",\n" +
                "  \"url\": \"http://192.168.20.61:8503/api/mobaopay-file-service/file/downloadFile/MAXWELL/210601/bdcc449ebbb64320a384713e4216a587\"\n" +
                "}";

        HashMap<String, Object> map = new HashMap<>();
        map.put("hasMaterial", false);
        map.put("id", "bdcc449ebbb64320a3");
        map.put("mark", "businessInfo");
        map.put("name", "工商信息");
        map.put("type", "png");
        map.put("typeName", "工商信息");
        map.put("url", "http://192.168.20");

//
//        System.out.println(s);
//        System.out.println(s);
//        System.out.println(StringEscapeUtils.escapeJson(s));
//        System.out.println(StringEscapeUtils.escapeJson(JSONUtil.toJsonStr(s)));
        String result = JSONUtil.toJsonStr(map);
        System.out.println(result);
        System.out.println(StringEscapeUtils.escapeJson(result));
    }

    /**
     * @param params
     * @return
     * @date 2023/4/13 10:18
     */
    public static String coverMap2String(Map<String, String> params) {
        if (CollectionUtil.isEmpty(params)) {
            return null;
        }
        StringBuilder content = new StringBuilder();
        //用TreeMap进行排序处理 默认为ASCII规范排序
        Map<String, String> treeMap = new TreeMap<>(String::compareTo);
        treeMap.putAll(params);
        treeMap.forEach((k, v) -> {
            //判断传入的字符串列表是否为空
            if (StringUtils.isNotBlank(k) && StringUtils.isNotBlank(v)) {
                content.append("&").append(k).append("=").append(v);
            }
        });
        content.delete(0, 1);
        return content.toString();
    }

    /**
     * 检查指定的字符串列表是否不为空。
     */
    public static boolean areNotEmpty(String... values) {
        boolean result = true;
        if (values == null || values.length == 0) {
            result = false;
        } else {
            for (String value : values) {
                result &= !StringUtils.isEmpty(value);
            }
        }
        return result;
    }

    private static void ooool() throws DocumentException, JsonProcessingException {
        //{"code":"10000","message":"成功","data":"goWdaNmAY40Bb9dVD3n8CA==","seqNo":"54NJGMQJ230404100004300"}
        //{"code":"10000","message":"成功","data":{"result":"2"},"seqNo":"54NJGMQJ230404100004300"}
        long start = System.currentTimeMillis();
        System.out.println(start);
        String respData = "{\"code\":\"10000\",\"message\":\"成功\",\"data\":\"goWdaNmAY40Bb9dVD3n8CA==\",\"seqNo\":\"54NJGMQJ230404100004300\"}";

        System.out.println("fastjson");
        long l = System.currentTimeMillis();
        JSONObject jsonObject = JSON.parseObject(respData);
        long a = System.currentTimeMillis();
        System.out.println("fastjson解析耗时:" + (a - l));
        long l7 = System.currentTimeMillis();
        Map v = JSON.parseObject(respData, Map.class);
        long a5 = System.currentTimeMillis();
        System.out.println("fastjson对象转换耗时:" + (a5 - l7));
        JSONObject jsonObject1 = JSON.parseObject(respData);
        System.out.println(jsonObject1);
        long l8 = System.currentTimeMillis();
        System.out.println("fastjson二次解析耗时:" + (l8 - l7));
        System.out.println(jsonObject.get("data"));
        jsonObject.put("data", jsonObject.get("data"));
        System.out.println(jsonObject.toJSONString());
        System.out.println("fastjson toJsonString耗时:" + (System.currentTimeMillis() - a));
        long ee = System.currentTimeMillis();
        System.out.println(jsonObject.toString());
        long ff = System.currentTimeMillis();
        System.out.println("fastjson toString耗时:" + (ff - ee));
        System.out.println("fastjson总耗时:" + (ff - start));

        System.out.println("hutool");
        long q = System.currentTimeMillis();
        cn.hutool.json.JSONObject object = JSONUtil.parseObj(respData);
        long l4 = System.currentTimeMillis();
        System.out.println("hutool解析耗时:" + (l4 - q));
        cn.hutool.json.JSONObject object2 = JSONUtil.parseObj(respData);
        System.out.println(object2);
        System.out.println("hutool二次解析耗时:" + (System.currentTimeMillis() - l4));
        System.out.println(object.get("data"));
        object.set("data", object.getStr("data"));
        long aa = System.currentTimeMillis();
        System.out.println(JSONUtil.toJsonStr(respData));
        long bb = System.currentTimeMillis();
        System.out.println("hutool toJsonString耗时:" + (bb - aa));
        long cc = System.currentTimeMillis();
        System.out.println(object.toString());
        long dd = System.currentTimeMillis();
        System.out.println("hutool toString耗时:" + (dd - cc));
        System.out.println(JSONUtil.parseObj(respData, false));
        System.out.println("hutool操作耗时:" + (System.currentTimeMillis() - q));

        long l1 = System.currentTimeMillis();
        cn.hutool.json.JSONObject obj1 = JSONUtil.createObj();
        System.out.println(obj1);
        long l2 = System.currentTimeMillis();
        System.out.println("hutool创建JSON耗时:" + (l2 - l1));
        cn.hutool.json.JSONObject obj2 = new cn.hutool.json.JSONObject();
        System.out.println(obj2);
        long l3 = System.currentTimeMillis();
        System.out.println("hutool new JSON耗时:" + (l3 - l2));

        System.out.println("ObjectMapper");
        long l5 = System.currentTimeMillis();
        JsonNode jsonNode = reader.readTree(respData);
        long o = System.currentTimeMillis();
        System.out.println(jsonNode);
        System.out.println("ObjectMapper解析耗时" + (o - l5));
        System.out.println(jsonNode.get("data"));
        long l6 = System.currentTimeMillis();
        System.out.println("ObjectMapper耗时" + (l6 - l5));

        System.out.println("fastjson2");
//        long json2 = System.nanoTime();
        long json2 = System.currentTimeMillis();
//        com.alibaba.fastjson2.JSONObject jsonObject2 = com.alibaba.fastjson2.JSON.parseObject(respData);
        com.alibaba.fastjson2.JSONObject jsonObject2 = com.alibaba.fastjson2.JSONObject.parseObject(respData);
        long json3 = System.currentTimeMillis();
        System.out.println(jsonObject2);
        System.out.println("fastjson2解析耗时" + (json3 - json2));

    }

    private static void loloppp() throws DocumentException {
        String data1 = "{\"birthday\":\"\",\"period\":null,\"address\":\"\",\"issue\":null,\"sex\":\"\",\"num\":\"\",\"type\":\"1\",\"name\":\"\",\"folk\":\"\"}";
        cn.hutool.json.JSONObject obj = JSONUtil.parseObj(data1);
        System.out.println(obj);

        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                "<moboAccount>\n" +
                "   <respData>\n" +
                "      <respCode>00</respCode>\n" +
                "      <respDesc>成功</respDesc>\n" +
                "      <result>{\"name\":\"\",\"sex\":\"\",\"folk\":\"\",\"birthday\":\"\",\"address\":\"\",\"num\":\"\",\"issue\":null,\"period\":null,\"type\":\"1\"}</result>\n" +
                "   </respData>\n" +
                "   <signMsg>42a755f7f4766263d58e203974793885</signMsg>\n" +
                "</moboAccount>";

        Document domRoot = DocumentHelper.parseText(xml);
        Element element = domRoot.getRootElement().element("respData");
        String domRespMsg = element.elementText("respDesc");
        String domResult = element.elementText("result");
        cn.hutool.json.JSONObject objElement = JSONUtil.parseObj(domResult);
    }

    private static void llooop() {
        String respData = "{\"resultflow\":\"563001491615399936\",\"result\":\"1\",\"msgtype\":\"0003\",\"msg\":{\"value\":\"4\",\"desc\":\"不匹配\"},\"pay\":1}";

        JSONObject jsonObject = JSON.parseObject(respData.toString());

        String pay = jsonObject.getString("pay");
        String resultString = jsonObject.getString("result");
        JSONObject msg = jsonObject.getJSONObject("msg");
        String desc = msg.getString("desc");
        msg = ObjectUtil.isNotNull(msg) ? msg : new JSONObject();

        System.out.println(jsonObject.getString("resultflow"));
        System.out.println(pay);
        System.out.println(resultString);
        System.out.println(desc);
        System.out.println(msg);
    }

    private static void lolo() {
        String message = "oooooo";
        HashMap<Object, Object> map = new HashMap<>();
        map.put("value", -1);
        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(map));
        String value = jsonObject.getString("value");
        JSONObject object = jsonObject.getJSONObject("ss");
        object = ObjectUtil.isNotNull(object) ? object : new JSONObject();
        System.out.println(value);
        System.out.println(object);
        System.out.println(object.getString("fff"));
    }

    private static void lll() {
        ArrayList<String> objects = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            objects.add("" + i);
        }
        long start = System.currentTimeMillis();
        String s = JSON.toJSONString(objects);
        System.out.println(s);
        long end = System.currentTimeMillis();

        System.out.println(end - start + "ms");
    }

    private static String idsFormat(List<String> ids) {
//        List<String> ids = new ArrayList<>();
//        ids.add("12121");
//        ids.add("134561");
//        ids.add("8970");
//        ids.add("4386");
        StringBuffer where = new StringBuffer();
        String join = String.join(",", ids);
        System.out.println(join);

        join = join.replace(",", "','");
        where = where.append(String.format("('%s')", join));
        System.out.println(where.toString());
        return where.toString();
    }

    private static void ssss() {
        String S = "{\"allotAlgo\":\"CIBZD\",\"allotCd\":\"CIBZC\",\"batchName\":\"测试\",\"businessTypeCode\":\"15\",\"channelMerchName\":\"\",\"channelNo\":\"CUP-ACP-XM\",\"directAcqSettleIn\":\"1\",\"fileUrl\":\"http://182.131.21.43:8080/file/downloadFile/MAXWELL/230324/36c79341b32b42b0bf2a2ee79f33fcbd\",\"merchantCode\":\"\",\"merchantServiceCode\":\"03\",\"productPackgeCode\":\"1503\"}\n";

        long start = System.currentTimeMillis();
//        String md5 = MD_5.digestHex16("SAOIFHSADIUFHGBASYIUDFBSDYUA8FBSADYUFGBSDYTU7").toLowerCase();
        System.out.println(System.currentTimeMillis() - start + "ms");
    }

    private static void kkll(BaseResult validate) {
        validate = BaseResult.success("mmmmmm");
    }

    private static String asa(String a) {
        a = "1";
        return a;
    }

    private static void sdsadas() {
        BaseResult returnDTO = new BaseResult();

        Map<String, Object> desSbuMerchMap = (Map<String, Object>) returnDTO.getData();
        System.out.println(desSbuMerchMap);
        ArrayList<LinkedHashMap> desSbuMerchList = (ArrayList<LinkedHashMap>) desSbuMerchMap.get("list");

        LinkedHashMap linkedHashMap = null == desSbuMerchList.get(0) ? null : desSbuMerchList.get(0);
        desSbuMerchList.get(0);
    }

    public static boolean isNull(Object obj) {
        return (null == obj || obj.equals((Object) null));
    }

    private static void sdasdasd() {
        String res = "{\n" +
                "\"code\":\"10000\",\n" +
                "\"message\":\"成功\",\n" +
                "\"data\":\n" +
                "{\n" +
                "\"score\":0.9663585424423218\n" +
                "},\n" +
                "\"seqNo\":\"34R952F61803161404\"\n" +
                "}";

        JSONObject resultJson = JSON.parseObject(res);
        String data = resultJson.getString("data");
        String seqNo = resultJson.getString("seqNo");
        System.out.println(data);
        System.out.println(seqNo);

        JSONObject dataJson = JSON.parseObject(data);
        String score = dataJson.getString("score");
        System.out.println(score);
        System.out.println(String.valueOf(score));
    }

    private static void DNTN() {
        //N天后
        System.out.println(DateUtils.addDays(new Date(), -6).toString());

        //判断是否为同一天
        System.out.println(DateUtil.isSameDay(new Date(), new Date()));

        long between = DateUtil.between(DateUtils.addDays(new Date(), -6), new Date(), DateUnit.DAY);
        System.out.println(between);

        String type = "D+3";
        String type2 = "T+3";
        if (type.equals("D+3") && between % 3 == 0) {
            //需结算
            System.out.println("需结算");
        }

        //2.28-3.3
        long A = 4;
        Boolean isWorkDay = true;
        if (isWorkDay) {
            if (type2.equals("T+3") && A % 3 == 0) {
                //需结算
                System.out.println("需结算");
            }

        }
    }

    private static <T> void forfor2(List<T> orderInfos, String filed) throws Exception {
        HashMap<String, T> autoEntry = new HashMap<>(16);
        Class<?> targetClazz = orderInfos.get(0).getClass();
        for (T outInfo : orderInfos) {
            Method method = ReflectionUtils.findMethod(targetClazz, filed);
            String fieldValue = (String) method.invoke(outInfo);
            autoEntry.put(fieldValue, outInfo);
        }
    }

    private static void forfor(ArrayList<?> orderInfos, ArrayList<?> userInfos, Map<String, String> unionMap) {

        HashMap<String, OrderInfoPO> autoEntry2 = new HashMap<>(16);

        for (Object orderInfo : orderInfos) {

        }

//        HashMap<String, OrderInfoPO> autoEntry = new HashMap<>(16);
//        for (OrderInfoPO outInfo : orderInfos) {
//            autoEntry.put(outInfo.getOrderId(), outInfo);
//        }


//        for (UserInfoPO userInfo : userInfos) {
//            OrderInfoPO outInfo = autoEntry.get(userInfo.getUserId());
//            if (Objects.nonNull(outInfo)) {
//                userInfo.setName(outInfo.getReturnMsg());
//            }
//        }
    }

    private static void jichu001() {
        String a = "abc";
        String b = "abc";
        String c = new String(b);
        String d = "ab" + "c";
        System.out.println(a == b);
        System.out.println(a == c);
        System.out.println(a == d);
        Integer i1 = 100;
        Integer i2 = 100;
        System.out.println(i1 == i2);
        Integer j1 = 200;
        Integer j2 = 200;
        System.out.println(j1 == j2);
    }

    private static void dsadasd() {
        String s = "{\"accountId\":\"7d103df231ee4f03a2cfc2aafcea56a7\",\"action\":\"SIGN_FLOW_UPDATE\",\"authorizedAccountId\":\"97e09d4046324697a3eb7ca183ab133a\",\"flowId\":\"a45ddcb9873b4cb180d291cdfd3d26ce\",\"order\":2,\"resultDescription\":\"签署完成\",\"signResult\":\"2\",\"signTime\":\"2023-02-07 17:40:11\",\"thirdPartyUserId\":\"sMaQ6BFUJRz90uoxRInIubM/l++MYvZrW68uX1x9D78=704\",\"timestamp\":1675762811367}";
        String s1 = "{\"action\":\"SIGN_FLOW_FINISH\",\"flowId\":\"a45ddcb9873b4cb180d291cdfd3d26ce\",\"flowStatus\":\"2\",\"timestamp\":1675762812045}";
    }

    private static void sadas() {
        String reqData = "{\n" +
                "    \"customerNo\":199950002329,\n" +
                "    \"managerEmail\":\"15320985816@163.com\",\n" +
                "    \"managerTel\":\"15320985816\",\n" +
                "    \"businessType\":\"1\",\n" +
                "    \"merchantProperty\":\"1\"\n" +
                "}";
        JSONObject reqMap = JSONObject.parseObject(reqData);
        System.out.println(JSONObject.toJSONString(reqMap));
        System.out.println(reqMap.getString("customerNo"));
    }

    private static void sdfsadfsadsad() {
        String originVersion = "1.0.0.0";
        String newVersion = "1.0.0.1";
        String messageType = "xxxxx" + "_" + originVersion;
        System.out.println(messageType);
        messageType = messageType.replace(originVersion, newVersion);
        System.out.println(messageType);

        String s = "aaaa.bbbb";
        String[] split = s.split(".");
        System.out.println(split.length);
        for (String s1 : split) {
            System.out.println("aaa:" + s1);
        }
    }

    private static void dsads() {
        StringBuilder stringBuilder = new StringBuilder("123456");
        stringBuilder.insert(3, "T");
        System.out.println(stringBuilder.toString());
    }

    private static void ldkas() {
        String s = "123:123:::";
        String[] split = s.split(":", 9999);
        System.out.println(split.length);
        for (String s1 : split) {
            System.out.println("wwww" + s1);
        }
    }

    private static void dsadsa() {
        String nativePlaceCode = "50023511";
        System.out.println(nativePlaceCode.substring(0, 6));
        getNativePlace(nativePlaceCode);
        System.out.println();
    }

    public static void getNativePlace(String nativePlaceCode) {
        String shengCode = nativePlaceCode.substring(0, 2);
        String shiCode = nativePlaceCode.substring(0, 4);
        String quxianCode = nativePlaceCode;

        System.out.println(shengCode);
        System.out.println(shiCode);
        System.out.println(quxianCode);
    }

    private static void sds() {
        String s = "{\n" +
                "     \"entId\": 617,\n" +
                "     \"ts\": 1621222860,\n" +
                "     \"method\": \"order.change.push\",\n" +
                "     \"data\": {\n" +
                "          \"sqtBizOrderId\": 526001045969776640,\n" +
                "          \"origOrderId\": \"694866826080335\",\n" +
                "          \"sqtType\": 12,\n" +
                "          \"changeType\": 102,\n" +
                "          \"changeStatus\": \"{\\\"ticketStatus\\\":\\\"LIFT/BOARDED\\\",\\\"ticketNumber\\\":\\\"666\\\"}\",\n" +
                "          \"changeTime\": 1621222800000,\n" +
                "          \"extInfoMap\": {}\n" +
                "     }\n" +
                "}";

        String s1 = "{\n" +
                "  \"entId\": 617,\n" +
                "  \"ts\": 1621222860,\n" +
                "  \"method\": \"order.change.push\",\n" +
                "  \"data\": {\n" +
                "    \"sqtBizOrderId\": 526001045969776640,\n" +
                "    \"origOrderId\": \"694866826080335\",\n" +
                "    \"sqtType\": 12,\n" +
                "    \"changeType\": 102,\n" +
                "    \"changeStatus\": \"{\\\"ticketStatus\\\":\\\"LIFT/BOARDED\\\",\\\"ticketNumber\\\":\\\"666\\\"}\",\n" +
                "    \"changeTime\": 1621222800000,\n" +
                "    \"extInfoMap\": {}\n" +
                "  }\n" +
                "}";

        String s3 = "01e09a8254424fd283a0570753e5b631";
        String s4 = "2548c12c0fbd42e5b088d11cc9c3404f";

        JSONObject jsonObject = JSONObject.parseObject(s1);
        Object data = jsonObject.get("data");
        JSONObject datastring = JSONObject.parseObject(data.toString());
        Object changeStatus = datastring.get("changeStatus");
        Object extInfoMap = datastring.get("extInfoMap");
        JSONObject changeStatusjson = JSONObject.parseObject(changeStatus.toString());
        Object ticketStatus = changeStatusjson.get("ticketStatus");
        Object ticketNumber = changeStatusjson.get("ticketNumber");
        System.out.println(extInfoMap);
        System.out.println(ticketStatus);
        System.out.println(ticketNumber);
        System.out.println(changeStatus);
        System.out.println(data.toString());
        System.out.println(jsonObject.toString());
    }

    private static void dfdsfds() {
//        ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) SpringThreadPoolConfig.taskExecutor();
//        executor.execute(() -> {
//            for (int i = 0; i < 10; i++) {
//                System.out.println(Thread.currentThread().getName() + ":" + i);
//            }
//        });
//        executor.shutdown();
//        executor.execute(() -> {
//            for (int i = 0; i < 10; i++) {
//                System.out.println(Thread.currentThread().getName() + ":" + i);
//            }
//        });
    }

    private static void 是的撒() {
        ArrayList<String> objects = new ArrayList<>();
        objects.add("2121");
        objects.add("343");
        objects.add("77777");
        System.out.println(String.join(",", objects));
    }

    private static void sadsad() {
        //保留方式:
        //ROUND_UP = 0 向外取整模式 ROUND_DOWN = 1 向内取整模式 ROUND_CEILING = 2
        //向上取整模式 ROUND_FLOOR = 3 向下取整模式 ROUND_HALF_UP = 4 四舍五入模式 ROUND_HALF_DOWN = 5
        //五舍六入模式 ROUND_HALF_EVEN = 6 ROUND_UNNECESSARY = 7 银行家舍入模式

        String num = "0.0000025";
        BigDecimal b = new BigDecimal(num);
        //保留2位小数
        BigDecimal result = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_UP);
        System.out.println(result.toString());  //111231.56
    }

    private static void llkk() {
        ArrayList<String> list = new ArrayList<>();
        list.add("ewewewewe");
        list.add("dsafdsfsdf");
        list.add("324fdggdg");
        HashSet<String> elements = new HashSet<>(list);
        elements.add("ewew");

        System.out.println(String.join(",", elements).toString());
    }

    public void nextNWorkDay(Date date, Integer n) {
//        List<Holiday> holidays= this.list();
//        if (n == 0) {	// T+0，如果T是节假日就相当于T+1
//            for (Holiday holiday: holidays) {
//                if (DateUtils.isSameDay(date, holiday.getHolidays())) {
//                    n = 1;
//                }
//            }
//        }
//        int delay = 1;
//        while (delay <= n) {
//            boolean addDelay = true;
//            date = DateUtils.addDays(date, 1);
//            for (Holiday holiday: holidays) {
//                if (DateUtils.isSameDay(date, holiday.getHoliday())) {
//                    addDelay = false;
//                    break;
//                }
//            }
//            if (addDelay) {
//                delay++;
//            }
//        }
//        return date;
    }

}